/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package frontera.dao;

import entidad.Candidato;
import java.util.ArrayList;
import javax.persistence.EntityManager;
import javax.persistence.NonUniqueResultException;
import javax.persistence.Query;

/**
 *
 * @author tuareg
 */
public class CandidatoDAO extends DAO<Candidato>{

	public CandidatoDAO(String nombreEntidad) {
		super(nombreEntidad);
	}

	public CandidatoDAO(){
		this("Candidato");
	}	
	
@Override
public boolean actualizar(Candidato viejaEntidad, Candidato nuevaEntidad) {
    EntityManager em = emf.createEntityManager();
    em.getTransaction().begin();
    boolean ret= false;
        try {
                viejaEntidad = leer(viejaEntidad);
                viejaEntidad.setNombre(nuevaEntidad.getNombre());
                viejaEntidad.setCedula(nuevaEntidad.getCedula());
                viejaEntidad.setEstado(nuevaEntidad.getEstado());
                viejaEntidad.setProfesion(nuevaEntidad.getProfesion());
                viejaEntidad.setAspiracionCargo(nuevaEntidad.getAspiracionCargo());
                em.merge(viejaEntidad);
                em.getTransaction().commit();
                ret = true;
        } catch (Exception e) {
                em.getTransaction().rollback();
        } finally {
                em.close();
                return ret;
            }
	}

        @Override
        public boolean eliminar(Candidato nuevaEntidad) {
		EntityManager em = emf.createEntityManager();
		em.getTransaction().begin();
		boolean ret = false;
                
                Candidato candidato = null;


                Query q = em.createQuery(   "SELECT c FROM Candidato c " +
                                            "WHERE c.cedula = :CEDULA")
                                            .setParameter("CEDULA", nuevaEntidad.getCedula());


                try {                       
                    candidato = (Candidato)q.getSingleResult();
                } catch (NonUniqueResultException e) {
                    candidato = (Candidato)q.getResultList().get(0);
                } catch (Exception e){
                    e.printStackTrace();
                }
                
		try {
			em.remove(candidato);
			em.getTransaction().commit();
			ret = true;
		} catch (Exception e) {
			e.printStackTrace();
			em.getTransaction().rollback();
		} finally {
			em.close();
			return ret;
		}
	}

    public Candidato leer(Candidato par) {
        EntityManager em = emf.createEntityManager();
        Candidato candidato = null;


        Query q = em.createQuery(   "SELECT c FROM Candidato c " +
                                    "WHERE c.cedula = :CEDULA")
                                    .setParameter("CEDULA", par.getCedula());
                                    

        try {                       
            candidato = (Candidato)q.getSingleResult();
        } catch (NonUniqueResultException e) {
            candidato = (Candidato)q.getResultList().get(0);
        } catch (Exception e){
            e.printStackTrace();
        }finally {
            em.close();
            return candidato;
        }
    }


    public ArrayList<Candidato> getCargoAsociado(Long id){
        EntityManager em = emf.createEntityManager();
        ArrayList<Candidato> candidatos = null;
        Query q = em.createQuery("SELECT c FROM Candidato c "+ 
                                "WHERE c.cargo.idCargo = :CARGO_IDCARGO")
                                .setParameter("CARGO_IDCARGO",id);
        try
        {
            candidatos = (ArrayList<Candidato>)q.getResultList();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }finally{
            em.close();
            return candidatos;
        }
    }

	
}
